package com.gray.blog.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.google.common.collect.Maps;
import com.gray.blog.common.entity.BaseEntity;
import com.gray.blog.dao.BaseDao;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;

public abstract class BaseService<D extends BaseDao<T>, T extends BaseEntity> {

    @Autowired
    private D dao;

    /**
     * 获取全部数据（一般不使用）
     */
    public List<T> getAllData() {
        return dao.getAllData();
    }

    /**
     * 根据id获取
     */
    public T getById(String id) {
        return dao.getById(id);
    }

    /**
     * 更新数据
     */
    public Boolean update(T entity) {
        return dao.update(entity) != 0;
    }

    /**
     * 插入数据
     */
    public Boolean insert(T entity) {
        return dao.insert(entity) == 1;
    }

    // TODO 批量插入

    /**
     * 逻辑删除
     */
    public Boolean delete(T entity) {
        return dao.delete(entity) != 0;
    }

    /**
     * 逻辑删除
     */
    public Boolean deleteById(String id) {
        return dao.deleteById(id) == 0;
    }

    /**
     * 分页查询
     */
    public IPage<T> findItemByPage(int currentPage, int pageSize) {
        Page<T> page = new Page<>(currentPage, pageSize);
        //page.setSearchCount(true); // count sql 优化，解决 MP 无法自动优化 SQL 问题
        return dao.getAllDataByPage(page);
    }

    /**
     * 分页查询（关键词）
     */
    public IPage<T> findItemByPage(int currentPage, int pageSize, Integer keyWordType, String keyWord) {
        Page<T> page = new Page<>(currentPage, pageSize);
        Map<String, Object> param = Maps.newHashMap();
        param.put("keyWord", keyWord);
        param.put("keyWordType", keyWordType);
        return dao.getAllDataByWordAndTypeByPage(page, param);
    }
}
